草庐IT

GCD ③ dispatch_barrier

全部标签

ios - 使用 GCD 并回调主线程时如何设置正确的对象拆卸?

考虑这个设置:对象A创建对象B做一些工作,并将自己设置为B的委托(delegate),以通知工作进度。B使用GCDblock做一些工作,并用有关工作完成的委托(delegate)方法向A发回信号。A想在工作完成后拆除(发布)B。在代码方面:对象A:B*b=[[Balloc]init];b.delegate=self;[bdoSomeWork];-(void)didSomeWorkFromB:(B*)b{[brelease];b=nil;}对象B:-(void)doSomeWork{dispatch_async(dispatch_get_global_queue(DISPATCH_QUE

ios - 如何使用 GCD 对异步后台任务进行排序?

我在iOS上使用GCD在后台线程上执行一项耗时的任务。API有一个start方法,它接受两个block作为参数,这两个block都在主队列上调用。第一个在任务开始时调用,第二个在任务完成时调用。这一切都有效。我实际上需要完成其中几项耗时的任务。API让我可以同时启动它们,然后等待每个完成并通过block更新UI。它们同时运行。但是我实际上想做的是对耗时的任务进行排序(仍然使用描述的API启动每个任务)以便我可以同时启动它们,让第一个运行并给我它的调用-backs,然后让第二个运行并给我它的回调等,直到所有完成。使用GCD和block实现此目的的最佳方法是什么?如果任务是同步的,我只需要

objective-c - objective c singleton dispatch_once 实现更好?

看到很多人建议用dispatch_once来做单例:+(MyClass*)singleton{staticdispatch_once_tpred;staticMyClass*shared=nil;dispatch_once(&pred,^{shared=[[MyClassalloc]init];});returnshared;}当它并不真正支持真正的单例时为什么会更好,而且人们仍然可以使用init创建实例甚至在sharedInstance上进行发布?Apple的方法是防止所有这些情况http://developer.apple.com/library/mac/#documentatio

iphone - dispatch_async 中的自定义 block

这段代码有效[[MyManagersharedManager]makeRequestAndParsingfor:someParameterssuccess:^(NSDictionary*dictionary){//SucessfulresponseNSLog(@"Success!!");}failure:^(NSError*error){//ErrorresponseNSLog(@"Failure!");}];但是每当我在后台运行相同的程序时,它永远不会进入成功或失败block。dispatch_async(dispatch_get_global_queue(DISPATCH_QUEU

ios - 使用 FMDB 将数据插入 SQLite 时,dispatch_async 上的 EXC_BAD_ACCESS

所以,我已经通读了我在互联网上找到的所有帖子,但我似乎仍然无法完成这项工作。我正在尝试将大量数据插入到sqlite数据库中。它是20000行数据,所以我必须在后台线程中进行。我有一个NSObject.h和.m文件来处理数据库操作。我从我的主视图中调用它们。这是我的代码:SQLiteDBHandler.m:database=[FMDatabasedatabaseWithPath:[selfgetDBPath]];[databaseopen];dispatch_queue_tq=dispatch_queue_create("FMDBQueue",NULL);dispatch_async(q

ios - 分派(dispatch)异步在编码图像时卡在主线程上

所以我正在获取此UIImage数据并将其转换为base64中的字符串。问题是它在转换时卡在UI线程上,我不确定为什么。-(void)processImage:(UIImage*)image{dispatch_queue_tmyQueue=dispatch_queue_create("MyQueue",NULL);[self.spinnerOutletsetAlpha:0.0f];[self.spinnerOutletstartAnimating];dispatch_async(myQueue,^{//ConvertimageNSData*myData=[UIImagePNGRepres

ios - 如何在 iOS 中为后台线程创建带条件计时器的 GCD block ?

以下是我从plist文件读取后台线程上传视频的方法。现在我需要的是,一旦他们从plist中读取了所有条目并完成了第一个block的执行,我想检查完成block中是否有任何新条目进入plist文件..如果不是,则调用startThreadForUpload几次之后。所以有人可以建议我该怎么做吗?现在我只是在完成block中调用相同的方法,所以它继续运行......-(void)startThreadForUpload{dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{assetMan

ios - dispatch_get_main_queue 在 iOS 8 中弃用

我通常按照这种模式编写代码:-(void)doLongTaskAsync:(CompletionBlock)completion{dispatch_async(backgroundQueue,^{//DoLongRunningCalculationdispatch_async(dispatch_get_main_queue(),^{completion();});});}如果dispatch_get_main_queue被弃用,这种代码风格的替代品是什么?NSOperationQueue现在是线程代码的唯一方法吗? 最佳答案 如da

ios - WKWebView 的网页不显示 dispatch_get_main_queue 内的页面

我正在尝试在后台进程中创建多个WKWebViewView,然后在它们全部完成加载后将它们添加到主线程上的View。每个WKWebView都包含一个通过javascript呈现的图表,因此每个WKWebView的加载时间大约需要一秒钟,所以我试图将处理卸载到后台,这样UI就不会被阻塞。当dispatch_get_main_queue被注释掉时,这工作正常,但是ui被阻塞了5-10秒。只显示WKWebView的棕色背景,没有网页内容。varwebViews:[WKWebView]=[]varmyQueue=dispatch_get_global_queue(DISPATCH_QUEUE_P

ios - 当使用特定队列调用 dispatch_async 时的符号断点

我正在调试我的项目中涉及中央调度的问题。在调试过程中,如果有一种方法可以在将工作分派(dispatch)到特定队列时收到通知,那将非常有帮助。是否有某种方法可以在dispatch_async上设置一个符号断点,其条件可以检查调度队列参数是否与我有权访问的其他队列相同? 最佳答案 这里是设置条件断点的方法。(我没有在队列上做条件,我在这里假设指针相等性将JustWork™。)首先得到你想要的队列的地址,假设它是0x12345678。然后创建一个断点:breakpointset-ndispatch_async-c'$register==